#include "cutil.h"

CUtil::CUtil()
{
}

SJaccardInfo CUtil::Jaccard(const QString &a, const QString &b)
{
    int i = 0, qtdIguais = 0, qtdDiferentes = 0;
    QString aX = a.toLower(), bX = b.toLower();

    for (; i < aX.length(); i++) {
        if (i < bX.length()) {
            if (aX.at(i) == bX.at(i))
                qtdIguais++;
            else
                qtdDiferentes++;
        }
    }
    if (aX.length() < bX.length())
        qtdDiferentes += bX.length() - aX.length();
    else if (aX.length() >  bX.length())
        qtdDiferentes += aX.length() - bX.length();
    SJaccardInfo ret;
    ret.proximidade = (double)qtdIguais / (qtdDiferentes + qtdIguais);
    ret.distancia = (double)qtdDiferentes / (qtdDiferentes + qtdIguais);
    return ret;
}

bool CUtil::ListaContains(QStringList lista, const QString &valor)
{
    foreach(QString s, lista) {
        if (CUtil::Jaccard(s, valor).proximidade >= 0.85)
            return true;
    }
    return false;
}
